import { IPSAppDELogic } from '../../app/dataentity/ipsapp-delogic';
import { IPSAppDEMethod } from '../../app/dataentity/ipsapp-demethod';
import { IPSAppDataEntity } from '../../app/dataentity/ipsapp-data-entity';
import { IPSNavigateParamContainer } from '../ipsnavigate-param-container';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSPanelDataRegion
 */
export interface IPSPanelDataRegion extends IPSNavigateParamContainer {
  /**
   * 数据对象名称
   * @type {string}
   */
  dataName: string;

  /**
   * 数据区域类型
   * @description 值模式 [数据面板模式] {NONE：无、 LOGINFORM：登录表单、 SINGLEDATA：单项数据、 MULTIDATA：多项数据、 INHERIT：继承、 USER：用户自定义 }
   * @type {( string | 'NONE' | 'LOGINFORM' | 'SINGLEDATA' | 'MULTIDATA' | 'INHERIT' | 'USER')}
   * @default INHERIT
   */
  dataRegionType: string | 'NONE' | 'LOGINFORM' | 'SINGLEDATA' | 'MULTIDATA' | 'INHERIT' | 'USER';

  /**
   * 数据源类型
   * @description 值模式 [数据面板源（全部）] {DEACTION：实体行为、 DEDATASET：实体集合、 DELOGIC：实体逻辑、 APPGLOBALPARAM：绑定应用全局变量、 TOPVIEWSESSIONPARAM：绑定顶级视图会话共享变量、 VIEWSESSIONPARAM：绑定当前视图会话共享变量 }
   * @type {( string | 'DEACTION' | 'DEDATASET' | 'DELOGIC' | 'APPGLOBALPARAM' | 'TOPVIEWSESSIONPARAM' | 'VIEWSESSIONPARAM')}
   */
  dataSourceType: string | 'DEACTION' | 'DEDATASET' | 'DELOGIC' | 'APPGLOBALPARAM' | 'TOPVIEWSESSIONPARAM' | 'VIEWSESSIONPARAM';

  /**
   * 应用实体处理逻辑
   *
   * @type {IPSAppDELogic}
   */
  getPSAppDELogic(): IPSAppDELogic | null;

  /**
   * 应用实体处理逻辑
   *
   * @type {IPSAppDELogic}
   */
  get psAppDELogic(): IPSAppDELogic | null;

  /**
   * 应用实体处理逻辑（必须存在）
   *
   * @type {IPSAppDELogic}
   */
  getPSAppDELogicMust(): IPSAppDELogic;

  /**
   * 应用实体方法
   *
   * @type {IPSAppDEMethod}
   */
  getPSAppDEMethod(): IPSAppDEMethod | null;

  /**
   * 应用实体方法
   *
   * @type {IPSAppDEMethod}
   */
  get psAppDEMethod(): IPSAppDEMethod | null;

  /**
   * 应用实体方法（必须存在）
   *
   * @type {IPSAppDEMethod}
   */
  getPSAppDEMethodMust(): IPSAppDEMethod;

  /**
   * 应用实体
   *
   * @type {IPSAppDataEntity}
   */
  getPSAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 应用实体
   *
   * @type {IPSAppDataEntity}
   */
  get psAppDataEntity(): IPSAppDataEntity | null;

  /**
   * 应用实体（必须存在）
   *
   * @type {IPSAppDataEntity}
   */
  getPSAppDataEntityMust(): IPSAppDataEntity;

  /**
   * 数据刷新间隔(ms)
   * @type {number}
   * @default -1
   */
  reloadTimer: number;
}
